Computer systems provide for the permanent storage of data that is organized into files on a storage device. In object-oriented parlance, data that is logically related is referred to as an object. Also, a file that contains an object is referred to as a container. When an object is stored in a container, the data of the object is typically stored in a logically contiguous portion of the container. A file system used to manage the storage of containers on the storage device may actually store the data in a container in non-contiguous portions of the device. FIG. 1A is a block diagram illustrating objects stored in a container. A container 102 contains ordered object A 104, object B 105, and object C 106. Object A 104 is the first object in the container, and object C 106 is the last object in the container. A memory 101 currently holds no objects.
Existing computer systems allow users to edit objects stored in containers. An example using FIGS. 1A-1D will illustrate typical prior methods for updating objects stored in the container. FIGS. 1A-1D show the contents of the memory 101 and the container 102 as object B 105 is edited and then saved in the container 102.
The prior methods first load object B 105 into the memory 101 as shown in FIG. 1B. The prior methods then edit object B 105. FIG. 1C shows the edited object B 108. In response to a user request to save the edited object B 108, the prior methods create a temporary container 109. The prior methods then write object A 104, edited object B 108, and object C 106 to the temporary container 109. The prior methods then delete the container 102 and rename temporary container 109 to the name of the deleted container 102 as shown by renamed container 110 in FIG. 1D.
For some time now, it has been appreciated that accessing permanent storage devices is much slower than accessing memory. Consequently, it would be desirable to reduce the amount of data written to storage devices. Moreover, it is also desirable to reduce the amount of storage needed to accomplish a given task.